home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 February: Tool Chest / Dev.CD Feb 97 TC.toast / Sample Code / Files / MoreFiles 1.4.4 / Pascal Interfaces / MoreFilesExtras.p < prev    next >
Encoding:
Text File  |  1996-12-17  |  21.8 KB  |  724 lines  |  [TEXT/MPS ]

  1. UNIT MoreFilesExtras;
  2.  
  3. {    Apple Macintosh Developer Technical Support                                }
  4. {                                                                            }
  5. {    A collection of useful high-level File Manager routines.                }
  6. {    by Jim Luther, Apple Developer Technical Support Emeritus                }
  7. {                                                                            }
  8. {    File:        MoreFilesExtras.p                                            }
  9. {                                                                            }
  10. {    Copyright © 1992-1996 Apple Computer, Inc.                                }
  11. {    All rights reserved.                                                    }
  12. {                                                                            }
  13. {    You may incorporate this sample code into your applications without        }
  14. {    restriction, though the sample code has been provided "AS IS" and the    }
  15. {    responsibility for its operation is 100% yours.  However, what you are    }
  16. {    not permitted to do is to redistribute the source as "DSC Sample Code"    }
  17. {    after having made changes. If you're going to re-distribute the source,    }
  18. {    we require that you make it clear in the source that the code was        }
  19. {    descended from Apple Sample Code, but that you've made changes.            }
  20.  
  21.  
  22. INTERFACE
  23.  
  24.     USES
  25.         Types, Files, Finder;
  26.  
  27.     CONST
  28.         {    Deny mode permissions for use with the HOpenAware, HOpenRFAware,    }
  29.         {    FSpOpenAware, and FSpOpenRFAware functions.                            }
  30.  
  31.         dmNone = $0000;
  32.         dmNoneDenyRd = $0010;
  33.         dmNoneDenyWr = $0020;
  34.         dmNoneDenyRdWr = $0030;
  35.         dmRd = $0001;    { Single writer, multiple readers; the readers }
  36.         dmRdDenyRd = $0011;
  37.         dmRdDenyWr = $0021;    { Browsing - equivalent to fsRdPerm }
  38.         dmRdDenyRdWr = $0031;
  39.         dmWr = $0002;
  40.         dmWrDenyRd = $0012;
  41.         dmWrDenyWr = $0022;
  42.         dmWrDenyRdWr = $0032;
  43.         dmRdWr = $0003;    { Shared access - equivalent to fsRdWrShPerm }
  44.         dmRdWrDenyRd = $0013;
  45.         dmRdWrDenyWr = $0023;    { Single writer, multiple readers; the writer }
  46.         dmRdWrDenyRdWr = $0033;    { Exclusive access - equivalent to fsRdWrPerm }
  47.  
  48.         {    Bit masks to get common information out of ioACUser returned by            }
  49.         {    PBGetCatInfo (remember to clear ioACUser before calling PBGetCatInfo    }
  50.         {    since some file systems don't bother to set this field).                }
  51.         {                                                                            }
  52.         {    Use the GetDirAccessRestrictions or FSpGetDirAccessRestrictions            }
  53.         {    functions to retrieve the ioACUser access restrictions byte for            }
  54.         {    a folder.                                                                }
  55.         {                                                                            }
  56.         {    Note:    The access restriction byte returned by PBGetCatInfo is the        }
  57.         {            2's complement of the user's privileges byte returned in        }
  58.         {            ioACAccess by PBHGetDirAccess.                                    }
  59.  
  60.         { bits defined in ioACUser }
  61.         acUserNoSeeFoldersMask = $01;
  62.         acUserNoSeeFilesMask = $02;
  63.         acUserNoMakeChangesMask = $04;
  64.         acUserNotOwnerMask = $80;
  65.  
  66.         { mask for just the access restriction bits }
  67.         acUserAccessMask = $07;
  68.  
  69.         { common access privilege settings }
  70.         acUserFull = $00;                        { no access restiction bits on }
  71.         acUserNone = acUserAccessMask;            { all access restiction bits on }
  72.         acUserDropBox = acUserNoSeeFoldersMask + acUserNoSeeFilesMask; { make changes, but not see files or folders }
  73.         acUserBulletinBoard = acUserNoMakeChangesMask;    { see files and folders, but not make changes }
  74.  
  75.  
  76. {    For those times where you need to use more than one kind of                }
  77. {    File Manager parameter block but don't feel like wasting stack space,    }
  78. {    here's a parameter block you can reuse.                                    }
  79.  
  80. {$PUSH}
  81. {$ALIGN MAC68K}
  82.  
  83.     TYPE
  84. {$IFC THINK_Pascal }
  85.         SInt8 = SignedByte;
  86.         UInt32 = LONGINT;
  87.         UnsignedWide = RECORD
  88.                 hi: UInt32;
  89.                 lo: UInt32;
  90.             END;
  91. {$ENDC}
  92.         UniversalFMPBHandle = ^UniversalFMPBPtr;
  93.         UniversalFMPBPtr = ^UniversalFMPB;
  94.         UniversalFMPB = RECORD
  95.                 CASE Integer OF
  96.                     1: (
  97.                             PB: ParamBlockRec
  98.                     );
  99.                     2: (
  100.                             ciPB: CInfoPBRec
  101.                     );
  102.                     3: (
  103.                             dtPB: DTPBRec
  104.                     );
  105.                     4: (
  106.                             hPB: HParamBlockRec
  107.                     );
  108.                     5: (
  109.                             cmPB: CMovePBRec
  110.                     );
  111.                     6: (
  112.                             wdPB: WDPBRec
  113.                     );
  114.                     7: (
  115.                             fcbPB: FCBPBRec
  116.                     );
  117.             END;
  118.  
  119.  
  120. {    Used by GetUGEntries to return user or group lists.                        }
  121.  
  122.         UGEntryHandle = ^UGEntryPtr;
  123.         UGEntryPtr = ^UGEntry;
  124.         UGEntry = RECORD
  125.                 objType: Integer;
  126.                 objID: LongInt;
  127.                 name: Str31;
  128.             END;
  129.  
  130.  
  131. {    I use the following record instead of the AFPVolMountInfo structure        }
  132. {    in Files.p                                                                }
  133.  
  134.         Str8 = STRING[8];
  135.         MyAFPVolMountInfoHandle = ^MyAFPVolMountInfoPtr;
  136.         MyAFPVolMountInfoPtr = ^MyAFPVolMountInfo;
  137.         MyAFPVolMountInfo = RECORD
  138.                 length: Integer;                { length of this record }
  139.                 media: VolumeType;                { type of media, always AppleShareMediaType }
  140.                 flags: Integer;                    { 0 = normal mount; set bit 0 to inhibit greeting messages }
  141.                 nbpInterval: SignedByte;        { NBP interval parameter; 7 is a good choice }
  142.                 nbpCount: SignedByte;            { NBP count parameter; 5 is a good choice }
  143.                 uamType: Integer;                { User Authentication Method }
  144.                 zoneNameOffset: Integer;        { offset from start of record to zoneName }
  145.                 serverNameOffset: Integer;        { offset from start of record to serverName }
  146.                 volNameOffset: Integer;            { offset from start of record to volName }
  147.                 userNameOffset: Integer;        { offset from start of record to userName }
  148.                 userPasswordOffset: Integer;    { offset from start of record to userPassword }
  149.                 volPasswordOffset: Integer;        { offset from start of record to volPassword }
  150.                 zoneName: Str31;                { server's AppleTalk zone name }
  151.                 serverName: Str31;                { server name }
  152.                 volName: Str27;                    { volume name }
  153.                 userName: Str31;                { user name (zero length Pascal string for guest) }
  154.                 userPassword: Str8;                { user password (zero length Pascal string if no user password) }
  155.                 volPassword: Str8;                { volume password (zero length Pascal string if no volume password) }
  156.             END;
  157.  
  158. {$ALIGN RESET}
  159. {$POP}
  160.  
  161.  
  162. {***************************************************************************}
  163.  
  164.     {    Functions to get information out of GetVolParmsInfoBuffer.    }
  165.     {    (implemented in this Unit).                                    }
  166.  
  167.     FUNCTION isNetworkVolume (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  168.     FUNCTION hasLimitFCBs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  169.     FUNCTION hasLocalWList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  170.     FUNCTION hasNoMiniFndr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  171.     FUNCTION hasNoVNEdit (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  172.     FUNCTION hasNoLclSync (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  173.     FUNCTION hasTrshOffLine (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  174.     FUNCTION hasNoSwitchTo (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  175.     FUNCTION hasNoDeskItems (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  176.     FUNCTION hasNoBootBlks (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  177.     FUNCTION hasAccessCntl (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  178.     FUNCTION hasNoSysDir (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  179.     FUNCTION hasExtFSVol (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  180.     FUNCTION hasOpenDeny (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  181.     FUNCTION hasCopyFile (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  182.     FUNCTION hasMoveRename (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  183.     FUNCTION hasDesktopMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  184.     FUNCTION hasShortName (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  185.     FUNCTION hasFolderLock (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  186.     FUNCTION hasPersonalAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  187.     FUNCTION hasUserGroupList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  188.     FUNCTION hasCatSearch (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  189.     FUNCTION hasFileIDs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  190.     FUNCTION hasBTreeMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  191.     FUNCTION hasBlankAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  192.  
  193.     {    Functions to get common information out of ioACUser.    }
  194.     {    (implemented in this Unit).                                }
  195.     FUNCTION userIsOwner (ioACUser: SInt8): Boolean;
  196.     FUNCTION userHasFullAccess (ioACUser: SInt8): Boolean;
  197.     FUNCTION userHasDropBoxAccess (ioACUser: SInt8): Boolean;
  198.     FUNCTION userHasBulletinBoard (ioACUser: SInt8): Boolean;
  199.     FUNCTION userHasNoAccess (ioACUser: SInt8): Boolean;
  200.  
  201.  
  202. {***************************************************************************}
  203.  
  204.  
  205.     PROCEDURE TruncPString (destination: StringPtr;
  206.                                     source: StringPtr;
  207.                                     maxLength: Integer);
  208.  
  209.     FUNCTION GetTempBuffer (buffReqSize: LONGINT;
  210.                                     VAR buffActSize: LONGINT): Ptr;
  211.  
  212.     FUNCTION GetVolumeInfoNoName (pathname: StringPtr;
  213.                                     vRefNum: Integer;
  214.                                     VAR pb: HParamBlockRec): OSErr;
  215.  
  216.     FUNCTION GetCatInfoNoName (vRefNum: Integer;
  217.                                     dirID: LongInt;
  218.                                     name: StringPtr;
  219.                                     VAR pb: CInfoPBRec): OSErr;
  220.  
  221.     FUNCTION DetermineVRefNum (pathname: StringPtr;
  222.                                     vRefNum: Integer;
  223.                                     VAR realVRefNum: Integer): OSErr;
  224.  
  225.     FUNCTION HGetVInfo (volReference: Integer;
  226.                                     volName: StringPtr;
  227.                                     VAR vRefNum: Integer;
  228.                                     VAR freeBytes: LongInt;
  229.                                     VAR totalBytes: LongInt): OSErr;
  230.  
  231.     FUNCTION XGetVInfo (volReference: Integer;
  232.                                     volName: StringPtr;
  233.                                     VAR vRefNum: Integer;
  234.                                     VAR freeBytes: UnsignedWide;
  235.                                     VAR totalBytes: UnsignedWide): OSErr;
  236.  
  237.     FUNCTION CheckVolLock (pathname: StringPtr;
  238.                                     vRefNum: Integer): OSErr;
  239.  
  240.     FUNCTION GetDriverName (driverRefNum: Integer;
  241.                                     VAR driverName: Str255): OSErr;
  242.  
  243.     FUNCTION FindDrive (pathname: StringPtr;
  244.                                     vRefNum: Integer;
  245.                                     VAR driveQElementPtr: DrvQElPtr): OSErr;
  246.  
  247.     FUNCTION UnmountAndEject (pathname: StringPtr;
  248.                                     vRefNum: Integer): OSErr;
  249.  
  250.     FUNCTION OnLine (volumes: FSSpecPtr;
  251.                                     reqVolCount: Integer;
  252.                                     VAR actVolCount: Integer;
  253.                                     VAR volIndex: Integer): OSErr;
  254.  
  255.     FUNCTION SetDefault (newVRefNum: Integer;
  256.                                     newDirID: LongInt;
  257.                                     VAR oldVRefNum: Integer;
  258.                                     VAR oldDirID: LongInt): OSErr;
  259.  
  260.     FUNCTION RestoreDefault (oldVRefNum: Integer;
  261.                                     oldDirID: LongInt): OSErr;
  262.  
  263.     FUNCTION GetDInfo (vRefNum: Integer;
  264.                                     dirID: LongInt;
  265.                                     name: StringPtr;
  266.                                     VAR fndrInfo: DInfo): OSErr;
  267.  
  268.     FUNCTION FSpGetDInfo ({CONST}
  269.                                     VAR spec: FSSpec;
  270.                                     VAR fndrInfo: DInfo): OSErr;
  271.  
  272.     FUNCTION SetDInfo (vRefNum: Integer;
  273.                                     dirID: LongInt;
  274.                                     name: StringPtr;
  275.                                     fndrInfo: DInfo): OSErr;
  276.  
  277.     FUNCTION FSpSetDInfo ({CONST}
  278.                                     VAR spec: FSSpec;
  279.                                     fndrInfo: DInfo): OSErr;
  280.  
  281.     FUNCTION GetDirectoryID (vRefNum: Integer;
  282.                                     dirID: LongInt;
  283.                                     name: StringPtr;
  284.                                     VAR theDirID: LongInt;
  285.                                     VAR isDirectory: Boolean): OSErr;
  286.  
  287.     FUNCTION FSpGetDirectoryID ({CONST}
  288.                                     VAR spec: FSSpec;
  289.                                     VAR theDirID: LongInt;
  290.                                     VAR isDirectory: Boolean): OSErr;
  291.  
  292.     FUNCTION GetDirName (vRefNum: Integer;
  293.                                     dirID: LongInt;
  294.                                     VAR name: Str31): OSErr;
  295.  
  296.     FUNCTION GetIOACUser (vRefNum: Integer;
  297.                                     dirID: LongInt;
  298.                                     name: StringPtr;
  299.                                     VAR ioACUser: SInt8): OSErr;
  300.  
  301.     FUNCTION FSpGetIOACUser (vRefNum: Integer;
  302.                                     dirID: LongInt;
  303.                                     name: StringPtr;
  304.                                     VAR ioACUser: SInt8): OSErr;
  305.  
  306.     FUNCTION GetParentID (vRefNum: Integer;
  307.                                     dirID: LongInt;
  308.                                     name: StringPtr;
  309.                                     VAR parID: LongInt): OSErr;
  310.  
  311.     FUNCTION GetFilenameFromPathname (pathname: Str255;
  312.                                     VAR filename: Str255): OSErr;
  313.  
  314.     FUNCTION GetObjectLocation (vRefNum: Integer;
  315.                                     dirID: LongInt;
  316.                                     pathname: StringPtr;
  317.                                     VAR realVRefNum: Integer;
  318.                                     VAR realParID: LongInt;
  319.                                     VAR realName: Str255;
  320.                                     VAR isDirectory: Boolean): OSErr;
  321.  
  322.     FUNCTION GetDirItems (vRefNum: Integer;
  323.                                     dirID: LongInt;
  324.                                     name: StringPtr;
  325.                                     getFiles: Boolean;
  326.                                     getDirectories: Boolean;
  327.                                     items: FSSpecPtr;
  328.                                     reqItemCount: Integer;
  329.                                     VAR actItemCount: Integer;
  330.                                     VAR itemIndex: Integer): OSErr;
  331.  
  332.     FUNCTION DeleteDirectoryContents (vRefNum: Integer;
  333.                                     dirID: LongInt;
  334.                                     name: StringPtr): OSErr;
  335.  
  336.     FUNCTION DeleteDirectory (vRefNum: Integer;
  337.                                     dirID: LongInt;
  338.                                     name: StringPtr): OSErr;
  339.  
  340.     FUNCTION CheckObjectLock (vRefNum: Integer;
  341.                                     dirID: LongInt;
  342.                                     name: StringPtr): OSErr;
  343.  
  344.     FUNCTION FSpCheckObjectLock ({CONST}
  345.                                     VAR spec: FSSpec): OSErr;
  346.  
  347.     FUNCTION GetFileSize (vRefNum: Integer;
  348.                                     dirID: LongInt;
  349.                                     fileName: Str255;
  350.                                     VAR dataSize: LONGINT;
  351.                                     VAR rsrcSize: LONGINT): OSErr;
  352.  
  353.     FUNCTION FSpGetFileSize ({CONST}
  354.                                     VAR spec: FSSpec;
  355.                                     VAR dataSize: LONGINT;
  356.                                     VAR rsrcSize: LONGINT): OSErr;
  357.  
  358.     FUNCTION BumpDate (vRefNum: Integer;
  359.                                     dirID: LongInt;
  360.                                     name: StringPtr): OSErr;
  361.  
  362.     FUNCTION FSpBumpDate ({CONST}
  363.                                     VAR spec: FSSpec): OSErr;
  364.  
  365.  
  366.     FUNCTION ChangeCreatorType (vRefNum: Integer;
  367.                                     dirID: LongInt;
  368.                                     name: Str255;
  369.                                     creator: OSType;
  370.                                     fileType: OSType): OSErr;
  371.  
  372.     FUNCTION FSpChangeCreatorType ({CONST}
  373.                                     VAR spec: FSSpec;
  374.                                     creator: OSType;
  375.                                     fileType: OSType): OSErr;
  376.  
  377.     FUNCTION ChangeFDFlags (vRefNum: Integer;
  378.                                     dirID: LongInt;
  379.                                     name: StringPtr;
  380.                                     setBits: Boolean;
  381.                                     flagBits: Integer): OSErr;
  382.  
  383.     FUNCTION FSpChangeFDFlags ({CONST}
  384.                                     VAR spec: FSSpec;
  385.                                     setBits: Boolean;
  386.                                     flagBits: Integer): OSErr;
  387.  
  388.     FUNCTION SetIsInvisible (vRefNum: Integer;
  389.                                     dirID: LongInt;
  390.                                     name: StringPtr): OSErr;
  391.  
  392.     FUNCTION FSpSetIsInvisible ({CONST}
  393.                                     VAR spec: FSSpec): OSErr;
  394.  
  395.     FUNCTION ClearIsInvisible (vRefNum: Integer;
  396.                                     dirID: LongInt;
  397.                                     name: StringPtr): OSErr;
  398.  
  399.     FUNCTION FSpClearIsInvisible ({CONST}
  400.                                     VAR spec: FSSpec): OSErr;
  401.  
  402.     FUNCTION SetNameLocked (vRefNum: Integer;
  403.                                     dirID: LongInt;
  404.                                     name: StringPtr): OSErr;
  405.  
  406.     FUNCTION FSpSetNameLocked ({CONST}
  407.                                     VAR spec: FSSpec): OSErr;
  408.  
  409.     FUNCTION ClearNameLocked (vRefNum: Integer;
  410.                                     dirID: LongInt;
  411.                                     name: StringPtr): OSErr;
  412.  
  413.     FUNCTION FSpClearNameLocked ({CONST}
  414.                                     VAR spec: FSSpec): OSErr;
  415.  
  416.     FUNCTION SetIsStationery (vRefNum: Integer;
  417.                                     dirID: LongInt;
  418.                                     name: Str255): OSErr;
  419.  
  420.     FUNCTION FSpSetIsStationery ({CONST}
  421.                                     VAR spec: FSSpec): OSErr;
  422.  
  423.     FUNCTION ClearIsStationery (vRefNum: Integer;
  424.                                     dirID: LongInt;
  425.                                     name: Str255): OSErr;
  426.  
  427.     FUNCTION FSpClearIsStationery ({CONST}
  428.                                     VAR spec: FSSpec): OSErr;
  429.  
  430.     FUNCTION SetHasCustomIcon (vRefNum: Integer;
  431.                                     dirID: LongInt;
  432.                                     name: StringPtr): OSErr;
  433.  
  434.     FUNCTION FSpSetHasCustomIcon ({CONST}
  435.                                     VAR spec: FSSpec): OSErr;
  436.  
  437.     FUNCTION ClearHasCustomIcon (vRefNum: Integer;
  438.                                     dirID: LongInt;
  439.                                     name: StringPtr): OSErr;
  440.  
  441.     FUNCTION FSpClearHasCustomIcon ({CONST}
  442.                                     VAR spec: FSSpec): OSErr;
  443.  
  444.     FUNCTION ClearHasBeenInited (vRefNum: Integer;
  445.                                     dirID: LongInt;
  446.                                     name: StringPtr): OSErr;
  447.  
  448.     FUNCTION FSpClearHasBeenInited ({CONST}
  449.                                     VAR spec: FSSpec): OSErr;
  450.  
  451.     FUNCTION CopyFileMgrAttributes (srcVRefNum: Integer;
  452.                                     srcDirID: LongInt;
  453.                                     srcName: StringPtr;
  454.                                     dstVRefNum: Integer;
  455.                                     dstDirID: LongInt;
  456.                                     dstName: StringPtr;
  457.                                     copyLockBit: Boolean): OSErr;
  458.  
  459.     FUNCTION FSpCopyFileMgrAttributes ({CONST}
  460.                                     VAR srcSpec: FSSpec;
  461.                                     {CONST}
  462.                                     VAR dstSpec: FSSpec;
  463.                                     copyLockBit: Boolean): OSErr;
  464.  
  465.     FUNCTION HOpenAware (vRefNum: Integer;
  466.                                     dirID: LongInt;
  467.                                     fileName: Str255;
  468.                                     denyModes: Integer;
  469.                                     VAR refNum: Integer): OSErr;
  470.  
  471.     FUNCTION FSpOpenAware ({CONST}
  472.                                     VAR spec: FSSpec;
  473.                                     denyModes: Integer;
  474.                                     VAR refNum: Integer): OSErr;
  475.  
  476.     FUNCTION HOpenRFAware (vRefNum: Integer;
  477.                                     dirID: LongInt;
  478.                                     fileName: Str255;
  479.                                     denyModes: Integer;
  480.                                     VAR refNum: Integer): OSErr;
  481.  
  482.     FUNCTION FSpOpenRFAware ({CONST}
  483.                                     VAR spec: FSSpec;
  484.                                     denyModes: Integer;
  485.                                     VAR refNum: Integer): OSErr;
  486.  
  487.     FUNCTION FSReadNoCache (refNum: Integer;
  488.                                     VAR count: LongInt;
  489.                                     buffPtr: Ptr): OSErr;
  490.  
  491.     FUNCTION FSWriteNoCache (refNum: Integer;
  492.                                     VAR count: LongInt;
  493.                                     buffPtr: Ptr): OSErr;
  494.  
  495.     FUNCTION FSWriteVerify (refNum: Integer;
  496.                                     VAR count: LongInt;
  497.                                     buffPtr: Ptr): OSErr;
  498.  
  499.     FUNCTION CopyFork (srcRefNum: Integer;
  500.                                     dstRefNum: Integer;
  501.                                     copyBufferPtr: Ptr;
  502.                                     copyBufferSize: LongInt): OSErr;
  503.  
  504.     FUNCTION GetFileLocation (refNum: Integer;
  505.                                     VAR vRefNum: Integer;
  506.                                     VAR dirID: LongInt;
  507.                                     fileName: StringPtr): OSErr;
  508.  
  509.     FUNCTION FSpGetFileLocation (refNum: Integer;
  510.                                     VAR spec: FSSpec): OSErr;
  511.  
  512.     FUNCTION CopyDirectoryAccess (srcVRefNum: Integer;
  513.                                     srcDirID: LongInt;
  514.                                     srcName: StringPtr;
  515.                                     dstVRefNum: Integer;
  516.                                     dstDirID: LongInt;
  517.                                     dstName: StringPtr): OSErr;
  518.  
  519.     FUNCTION FSpCopyDirectoryAccess ({CONST}
  520.                                     VAR srcSpec: FSSpec;
  521.                                     {CONST}
  522.                                     VAR dstSpec: FSSpec): OSErr;
  523.  
  524.     FUNCTION HMoveRenameCompat (vRefNum: Integer;
  525.                                     srcDirID: LongInt;
  526.                                     srcName: Str255;
  527.                                     dstDirID: LongInt;
  528.                                     dstpathName: StringPtr;
  529.                                     copyName: StringPtr): OSErr;
  530.  
  531.     FUNCTION FSpMoveRenameCompat ({CONST}
  532.                                     VAR srcSpec: FSSpec;
  533.                                     {CONST}
  534.                                     VAR dstSpec: FSSpec;
  535.                                     copyName: StringPtr): OSErr;
  536.  
  537.     FUNCTION BuildAFPVolMountInfo (theFlags: Integer;
  538.                                     theNBPInterval: SignedByte;
  539.                                     theNBPCount: SignedByte;
  540.                                     theUAMType: Integer;
  541.                                     theZoneName: Str31;
  542.                                     theServerName: Str31;
  543.                                     theVolName: Str27;
  544.                                     theUserName: Str31;
  545.                                     theUserPassWord: Str8;
  546.                                     theVolPassWord: Str8;
  547.                                     theAFPInfo: MyAFPVolMountInfoPtr): OSErr;
  548.  
  549.     FUNCTION RetrieveAFPVolMountInfo (theAFPInfo: AFPVolMountInfoPtr;
  550.                                     VAR theFlags: Integer;
  551.                                     VAR theUAMType: Integer;
  552.                                     theZoneName: StringPtr;
  553.                                     theServerName: StringPtr;
  554.                                     theVolName: StringPtr;
  555.                                     theUserName: StringPtr): OSErr;
  556.  
  557.     FUNCTION GetUGEntries (objType: Integer;
  558.                                     entries: UGEntryPtr;
  559.                                     reqEntryCount: LongInt;
  560.                                     VAR actEntryCount: LongInt;
  561.                                     VAR objID: LongInt): OSErr;
  562.  
  563.  
  564. {***************************************************************************}
  565.  
  566.  
  567. IMPLEMENTATION
  568.  
  569.     {    Functions to get information out of GetVolParmsInfoBuffer.    }
  570.  
  571.     FUNCTION isNetworkVolume (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  572.     BEGIN
  573.         isNetworkVolume := (volParms.vMServerAdr <> 0);
  574.     END;
  575.  
  576.     FUNCTION hasLimitFCBs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  577.     BEGIN
  578.         hasLimitFCBs := BTST(volParms.vMAttrib, bLimitFCBs);
  579.     END;
  580.  
  581.     FUNCTION hasLocalWList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  582.     BEGIN
  583.         hasLocalWList := BTST(volParms.vMAttrib, bLocalWList);
  584.     END;
  585.  
  586.     FUNCTION hasNoMiniFndr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  587.     BEGIN
  588.         hasNoMiniFndr := BTST(volParms.vMAttrib, bNoMiniFndr);
  589.     END;
  590.  
  591.     FUNCTION hasNoVNEdit (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  592.     BEGIN
  593.         hasNoVNEdit := BTST(volParms.vMAttrib, bNoVNEdit);
  594.     END;
  595.  
  596.     FUNCTION hasNoLclSync (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  597.     BEGIN
  598.         hasNoLclSync := BTST(volParms.vMAttrib, bNoLclSync);
  599.     END;
  600.  
  601.     FUNCTION hasTrshOffLine (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  602.     BEGIN
  603.         hasTrshOffLine := BTST(volParms.vMAttrib, bTrshOffLine);
  604.     END;
  605.  
  606.     FUNCTION hasNoSwitchTo (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  607.     BEGIN
  608.         hasNoSwitchTo := BTST(volParms.vMAttrib, bNoSwitchTo);
  609.     END;
  610.  
  611.     FUNCTION hasNoDeskItems (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  612.     BEGIN
  613.         hasNoDeskItems := BTST(volParms.vMAttrib, bNoDeskItems);
  614.     END;
  615.  
  616.     FUNCTION hasNoBootBlks (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  617.     BEGIN
  618.         hasNoBootBlks := BTST(volParms.vMAttrib, bNoBootBlks);
  619.     END;
  620.  
  621.     FUNCTION hasAccessCntl (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  622.     BEGIN
  623.         hasAccessCntl := BTST(volParms.vMAttrib, bAccessCntl);
  624.     END;
  625.  
  626.     FUNCTION hasNoSysDir (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  627.     BEGIN
  628.         hasNoSysDir := BTST(volParms.vMAttrib, bNoSysDir);
  629.     END;
  630.  
  631.     FUNCTION hasExtFSVol (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  632.     BEGIN
  633.         hasExtFSVol := BTST(volParms.vMAttrib, bHasExtFSVol);
  634.     END;
  635.  
  636.     FUNCTION hasOpenDeny (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  637.     BEGIN
  638.         hasOpenDeny := BTST(volParms.vMAttrib, bHasOpenDeny);
  639.     END;
  640.  
  641.     FUNCTION hasCopyFile (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  642.     BEGIN
  643.         hasCopyFile := BTST(volParms.vMAttrib, bHasCopyFile);
  644.     END;
  645.  
  646.     FUNCTION hasMoveRename (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  647.     BEGIN
  648.         hasMoveRename := BTST(volParms.vMAttrib, bHasMoveRename);
  649.     END;
  650.  
  651.     FUNCTION hasDesktopMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  652.     BEGIN
  653.         hasDesktopMgr := BTST(volParms.vMAttrib, bHasDesktopMgr);
  654.     END;
  655.  
  656.     FUNCTION hasShortName (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  657.     BEGIN
  658.         hasShortName := BTST(volParms.vMAttrib, bHasShortName);
  659.     END;
  660.  
  661.     FUNCTION hasFolderLock (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  662.     BEGIN
  663.         hasFolderLock := BTST(volParms.vMAttrib, bHasFolderLock);
  664.     END;
  665.  
  666.     FUNCTION hasPersonalAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  667.     BEGIN
  668.         hasPersonalAccessPrivileges := BTST(volParms.vMAttrib, bHasPersonalAccessPrivileges);
  669.     END;
  670.  
  671.     FUNCTION hasUserGroupList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  672.     BEGIN
  673.         hasUserGroupList := BTST(volParms.vMAttrib, bHasUserGroupList);
  674.     END;
  675.  
  676.     FUNCTION hasCatSearch (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  677.     BEGIN
  678.         hasCatSearch := BTST(volParms.vMAttrib, bHasCatSearch);
  679.     END;
  680.  
  681.     FUNCTION hasFileIDs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  682.     BEGIN
  683.         hasFileIDs := BTST(volParms.vMAttrib, bHasFileIDs);
  684.     END;
  685.  
  686.     FUNCTION hasBTreeMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  687.     BEGIN
  688.         hasBTreeMgr := BTST(volParms.vMAttrib, bHasBTreeMgr);
  689.     END;
  690.  
  691.     FUNCTION hasBlankAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  692.     BEGIN
  693.         hasBlankAccessPrivileges := BTST(volParms.vMAttrib, bHasBlankAccessPrivileges);
  694.     END;
  695.  
  696.     {    Functions for testing ioACUser bits.    }
  697.  
  698.     FUNCTION userIsOwner (ioACUser: SInt8): Boolean;
  699.     BEGIN
  700.         userIsOwner := NOT (BTST(ioACUser, acUserNotOwnerMask));
  701.     END;
  702.  
  703.     FUNCTION userHasFullAccess (ioACUser: SInt8): Boolean;
  704.     BEGIN
  705.         userHasFullAccess := BAND(ioACUser, acUserAccessMask) = acUserFull;
  706.     END;
  707.  
  708.     FUNCTION userHasDropBoxAccess (ioACUser: SInt8): Boolean;
  709.     BEGIN
  710.         userHasDropBoxAccess := BAND(ioACUser, acUserAccessMask) = acUserDropBox;
  711.     END;
  712.  
  713.     FUNCTION userHasBulletinBoard (ioACUser: SInt8): Boolean;
  714.     BEGIN
  715.         userHasBulletinBoard := BAND(ioACUser, acUserAccessMask) = acUserBulletinBoard;
  716.     END;
  717.  
  718.     FUNCTION userHasNoAccess (ioACUser: SInt8): Boolean;
  719.     BEGIN
  720.         userHasNoAccess := BAND(ioACUser, acUserAccessMask) = acUserNone;
  721.     END;
  722.  
  723.  
  724. END.